//与用户注册、用户登录、退出登录相关的代码
//导入express包
const express = require('express');
//导入md5包
const md5 = require('md5')
//获取date-fns包的format方法
const { format } = require('date-fns')
//导入db文件
const { pool } = require('../../db/db')


//创建路由对象
const router = express.Router();


//响应注册页面
router.get('/reg', (req, res) => {
    //使用ejs渲染(响应注册页面)
    res.render('reg')
})

//响应登录页面
router.get('/login', (req, res) => {
    //使用ejs渲染(响应登录页面)
    res.render('login')
})

//处理用户提交的注册信息
router.post('/reg', (req, res) => {
    //获取用户注册时的时间
    const time = format(new Date(), 'yyyy-MM-dd HH:mm:ss')
    //获取用户填写的注册信息
    const { username, password, email } = req.body
    //-----------------------------------------------------------------
    //将用户的注册信息存入数据库users集合中-MongoDB
    // UserModel.create({
    //     username: username,
    //     password: md5(password),
    //     email: email,
    //     time: time
    // }, (err, data) => {
    //     if (err) {
    //         res.status(500).send('服务器内部错误...')
    //         return
    //     }
    //     //使用ejs渲染(提醒用户注册成功)
    //     res.render('regRemind', { username: username, time: time })
    // })
    //-----------------------------------------------------------------
    //将用户的注册信息存入数据库users表中-MySQL
    //定义sql语句
    const sqlStr = 'insert into users set ?'
    //数据准备
    const data = {
        username: username,
        password: md5(password),
        email: email,
        time: time
    }
    //数据插入
    pool.query(sqlStr, data, (err, data) => {
        //操作失败
        if (err) return console.log('操作失败...' + err.message)
        //使用ejs渲染(提醒用户注册成功)
        res.render('regRemind', { username: username, time: time })
    })
})

//处理用户提交的登录信息
router.post('/login', (req, res) => {
    //先获取用户填写的登录信息
    const { username, password } = req.body
    //-----------------------------------------------------------------
    // //后校验登录信息是否匹配(根据查询条件来校验)-MongoDB
    // UserModel.findOne({ username: username, password: md5(password) }, (err, data) => {
    //     if (!data) {
    //         res.send('账号或密码错误...')
    //         return
    //     }
    //     //获取用户当前计算机的时间
    //     const time = format(new Date(), 'yyyy-MM-dd HH:mm:ss')
    //     //登录成功后设置session信息(下面设置的session信息是保存在数据库中的，会通过sid来查找到这些信息)
    //     req.session.user = {
    //         username: data.username,
    //         userId: data._id,
    //         logTime: time
    //     }
    //     //重定向至首页
    //     res.redirect('/')
    // })
    //-----------------------------------------------------------------
    //后校验登录信息是否匹配(根据查询条件来校验)-MySQL
    //定义sql语句
    const sqlStr = 'select * from users where username=? and password=?'
    //数据准备
    const data = { username: username, password: md5(password) }
    //登录校验
    pool.query(sqlStr, [data.username, data.password], (err, data) => {
        //操作失败
        if (err) return console.log('操作失败...' + err.message)
        //操作成功-没有匹配的数据，data是一个空数组
        if (data.length === 0) {
            res.send('账号或密码错误...')
            return
        }
        //操作成功-有匹配的数据(登录成功)，data是一个数组对象
        //获取用户当前计算机的时间
        const time = format(new Date(), 'yyyy-MM-dd HH:mm:ss')
        //设置session信息
        req.session.user = {
            userId: data[0].id,
            username: username,
            logTime: time
        }
        //重定向至主页
        res.redirect('/')
    })
})

//处理用户退出登录
router.get('/logout', (req, res) => {
    //销毁session信息
    req.session.destroy()
    //重定向至登录页面
    res.redirect('/login')
})


//数据暴露
module.exports = router;